const express = require('express');
const cors = require('cors');
const app = express();

// 启用 CORS
app.use(cors());

// 模拟AI响应的文本
// const mockResponse = '你好！我是AI助手Claude。我是由Anthropic公司开发的大型语言模型，能够帮助你完成各种任务，包括但不限于：编程开发、文章写作、数据分析、问题解答等。我会尽我所能为你提供准确、有帮助的回答。我的知识库涵盖了广泛的领域，并且我会以友好、专业的方式与你交流。我始终保持诚实和透明，不会编造信息或做出超出我能力范围的承诺。在与我交流时，你可以放心地分享你的想法和问题，我会认真倾听并给出我的建议。我也会在必要时承认自己的局限性，并建议你在重要决策时咨询相关领域的专业人士。我的目标是成为你值得信赖的助手，帮助你更好地完成工作和学习任务。让我们开始愉快的对话吧！作为一个AI，我很感激能有机会和你交流，并期待能为你提供有价值的帮助。§<package id="1234567890">§<package id="898">';
const mockResponse1 = '你好！我是AI助手Claude。我是由Anthropic公司开发的大型语言模型，能够帮助你完成各种任务。';
const mockResponse2 = '你好！我是AI助手Claude。我是由Anthropic公司开发的大型语言模型，能够帮助你完成各种任务。§<package id="1234567890">§阿苏话都爱§<package id="898">§言模型，能够帮助你完成各种任务';
const mockResponse3 = '你好！我是AI助手Claude。我§<package id="1234567890">§是由Anthropic公司开发的大型语言模型，能够帮助你完成各种任务。§<package id="898">§言模型，能够帮助你完成各种任务';
const mockResponse4 = '你好！我是AI助手Claude。我§<package id="1234567890">§是由Anthropic公司开发的大型语言模型，能够帮助你完成各种任务。言模型，能够帮助你完成各种任务§<package id="898">§';
const mockResponse5 = '§<package id="1234567890">§你好！我是AI助手Claude。我是由Anthropic公司开发的大型语§<package id="898">§言模型，能够帮助你完成各种任务。言模型，能够帮助你完成各种任务';
const mockResponse6 = '§<package id="1234567890">§你好！我是AI助手Claude。我是由Anthropic公司开发的大型语言模型，能够帮助你完成各种任务。言模型，能够帮助你完成各种任务§<package id="898">§';
const mockList = [mockResponse1, mockResponse2, mockResponse3, mockResponse4, mockResponse5, mockResponse6] // 匹配算法调整，结果都通过！！！



// 生成随机延迟时间 (0-1秒)
function getRandomDelay() {
    return Math.random() * 400;
}

// 生成随机字符数量 (1-5个字符)
function getRandomChunkSize() {
    return Math.floor(Math.random() * 4) + 1;
    // return 1;
}

// 递归发送数据
function sendChunk(res, characters, startIndex = 0) {
    if (startIndex >= characters.length) {
      res.write('data: [DONE]\n\n');
      res.end();
      return;
    }

    const chunkSize = Math.min(getRandomChunkSize(), characters.length - startIndex);
    const chunk = characters.slice(startIndex, startIndex + chunkSize).join('');
    
    res.write(`data: ${chunk}\n\n`);

    setTimeout(() => {
      sendChunk(res, characters, startIndex + chunkSize);
    }, getRandomDelay());
}
let i = 1

// SSE路由处理
app.get('/stream', (req, res) => {
    res.writeHead(200, {
        'Content-Type': 'text/event-stream',
        'Cache-Control': 'no-cache',
        'Connection': 'keep-alive'
    });

    const characters = mockList[i].split('');
    sendChunk(res, characters);

    // 客户端断开连接时的处理
    req.on('close', () => {
        res.end();
        i++
    });
});

// 启动服务器
const PORT = 3000;
app.listen(PORT, () => {
    console.log(`SSE服务器运行在 http://localhost:${PORT}`);
});
